package com.woniuxy.dynamic.jdk;

import com.woniuxy.dynamic.aspect.LogForService;

import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class JdkDynamic {
    public Object getProxyObject(Object targetClass){
        Object o = Proxy.newProxyInstance(targetClass.getClass().getClassLoader(),
                targetClass.getClass().getInterfaces(), (Object proxy, Method method, Object[] args) -> {
                    //直接写业务 这个就是方法体
                    //1.方法前增强
                    LogForService logForService = new LogForService();
                    logForService.beforeStrengthen();
                    //2.目标类的方法 它就相当于反射一个对象然后执行对象的方法
                    Object invoke = method.invoke(targetClass, args);
                    //3.方法后增强
                    logForService.afterStrengthen();
                    return invoke;
                }
        );
        return o;
    }
}
